"""
这个打开浏览器获取driver 每个用例都需要， 并且每个用例执行完后，需要关闭浏览器；
* 我们可以定义一个夹具： 设置前置和后置操作
* 避免代码的重复性。

前置： 打开浏览器 网址
后置： 关闭浏览器

这个夹具要设置返回值么？ --

"""
import pytest
from selenium import webdriver
from loguru import logger
from data.setting import url  # url["dev"] 得到具体的地址信息


@pytest.fixture()
def open_close_broswer(get_env): # 在打开浏览器的前置里 调用获取参数值的夹具，并可以得到返回值 【夹具调用夹具】
    env_addr = url[get_env] # 得到夹具的返回值 然后通过url进行字典取值 得到url地址
    driver = webdriver.Chrome()
    driver.maximize_window()
    logger.info("---------打开浏览器-------")
    logger.info(f"打开网址：{env_addr}")
    driver.get(env_addr)  # 固定地址进行替换 动态环境切换
    yield driver  # 要返回driver 因为后面用例步骤需要用这个driver
    logger.info("关闭浏览器")
    driver.quit()


# 添加钩子函数： 注册pytest的参数的 用于传递测试环境名字 【钩子函数不能改】
def pytest_addoption(parser):
    # 注册自定义参数命令行参数
    parser.addoption("--env", default="test", choices=['dev', 'test', 'uat', 'pro'], help="命令行参数 '--env' 设置环境切换")
    # parser.addoption("--host", default="wins", choices=['win', 'mac', 'linux'], help="命令行参数 '--host' 设置系统版本")

# 定义一个夹具，可以获取pytest参数的值【--env值】，返回值这个值；
# 用例里/open_close_broswer前置都可以调用这个夹具 ，从而拿到这个参数的值；
# 拿到值之后 可以url取值。

# 定义一个夹具获取--env参数的值
@pytest.fixture()
def get_env(request): # 【夹具的名字可以改】
    # 从命令行参数中读取env参数的值 --dev pro uat test 等,字典的key
    option_env = request.config.getoption("--env")
    # option_host = request.config.getoption("--host")
    print(f"--env的参数值是：{option_env}")
    yield option_env  # 返回这个参数的值